Skip to content

chore: migrate panll off npm onto Deno (standards#253 step)#65

Merged
hyperpolymath merged 1 commit into
mainfrom
chore/npm-to-deno-migration
May 30, 2026
Merged

chore: migrate panll off npm onto Deno (standards#253 step)#65
hyperpolymath merged 1 commit into
mainfrom
chore/npm-to-deno-migration

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Eliminate package.json + package-lock.json from panll. All build orchestration now flows through deno.json tasks using npm: specifiers cached by deno install.

This supersedes the band-aid in panll#62 (workflow switched npm ci -> npm install --no-audit --no-fund to work around lockfile drift). With package.json removed, the drift class disappears entirely. Lockfile-drift root cause traced to session_2026_05_30_snifs_build_mode_arc.

Implements one step of the estate npm->Deno umbrella (hyperpolymath/standards#253).

Changes

  • deno.json: add nodeModulesDir: "auto"; tailwindcss + rescript + @rescript/core + @rescript/runtime promoted to deno imports; tasks invoke them via deno run -A --allow-scripts=npm:<pkg> npm:<pkg>@VER. Pinned-version trailing-slash forms npm:/pkg@VER/ keep the .res.js subpath imports URL-resolvable.
  • .github/workflows/build-validation.yml: drop actions/setup-node; npm ci + npm run res:build replaced with deno install + deno task res:build; drop stale src-tauri/ manifest-paths (Gossamer migration completed previously — src-tauri/ does not exist on main); rust gate now cargo check + cargo test --lib at workspace root. Linux deps step renamed Tauri -> Gossamer.
  • .github/workflows/e2e.yml: replace npx rescript build with deno task res:build across all 3 jobs.
  • Delete package.json + package-lock.json (no .npmrc was present).
  • deno.lock auto-tidies: packageJson block removed; workspace.dependencies absorbs the four formerly-package.json deps.

Tailwind decision (transitional)

Kept tailwindcss via npm:tailwindcss@^3.4.19 specifier as the transitional choice. No fully deno-native drop-in is worth the semantic swap right now (windicss/unocss diverge from existing class semantics). Recommend filing a follow-up issue under standards#253 for a future tailwind -> deno-native swap.

Test plan

Verified locally on this branch (Linux x86_64, deno 2.7.14):

  • deno install — OK (77 npm packages resolved)
  • deno task res:build — OK (.res.js outputs produced, warnings only)
  • deno task bundle — OK (public/app.bundle.js 5.6 MB)
  • deno task css:build — OK (public/styles.css 81 KB)
  • deno task test2545 passed / 21 failed — IDENTICAL to main (the 21 failures are pre-existing and unrelated; confirmed by running the same suite on main and getting the same counts)
  • cargo check --lib — OK
  • deno cache scripts/bundle.ts — OK

just dev (Gossamer GTK window) not runnable in this sandbox — CI build-validation job covers the rust gate after this PR.

Refs

Adjacent gaps noticed (not fixed here)

While in the repo, the meander surfaced:

  • scripts/bundle.ts line 19: stale // Tauri JS APIs ... comment (Gossamer migrated). Source comment only; not load-bearing — owner may want to clean in a separate doc-sweep PR.
  • README.adoc, src/model/README.md, docs/guides/llm-warmup-user.md, AGENTS.md, GEMINI.md, .junie/guidelines.md, CONTRIBUTING.md, CHANGELOG.md, TOPOLOGY.md: contain npx rescript build / "npm only for ReScript" / "Tauri" references that will be stale post-merge. Suggest a docs-sweep follow-up PR.
  • docs/archive/NPM-TO-DENO-MIGRATION.md: archived migration plan now satisfied — can be marked CLOSED.
  • Justfile, contractile.just: no direct npm/npx calls — clean.
  • tests/cross_panel_integration_test.js:242 references "package.json" as a string (likely a path probe / topology check). May need a small follow-up if the test relies on the file's existence.

Robot generated with Claude Code

@hyperpolymath hyperpolymath enabled auto-merge (squash) May 30, 2026 16:39
Eliminate package.json + package-lock.json. All build orchestration
now flows through deno.json tasks using npm: specifiers cached by
`deno install`.

Resolves the lockfile-drift root cause that band-aided in panll#62
(workflow switched npm ci -> npm install --no-audit --no-fund). With
package.json removed, the drift class disappears entirely.

Changes:
- deno.json: add nodeModulesDir=auto; tailwindcss + rescript +
  @rescript/core + @rescript/runtime promoted to deno imports; tasks
  invoke them via deno run -A --allow-scripts=npm:<pkg> npm:<pkg>@ver.
  Pinned-version trailing-slash forms (npm:/pkg@VER/) keep the
  res.js subpath imports URL-resolvable.
- .github/workflows/build-validation.yml: drop actions/setup-node;
  npm ci/npm run res:build replaced with deno install + deno task
  res:build; drop stale src-tauri/ manifest-path (Gossamer migration
  completed previously); rust gate now cargo check / cargo test --lib
  at workspace root. Linux deps step renamed Tauri -> Gossamer.
- .github/workflows/e2e.yml: replace `npx rescript build` with
  `deno task res:build` (3 jobs).
- Delete package.json + package-lock.json (no .npmrc was present).
- deno.lock auto-tidies: packageJson block removed, workspace.
  dependencies absorbs the four formerly-package.json deps.

Verified locally:
- `deno install`           OK (77 npm packages resolved)
- `deno task res:build`    OK (.res.js outputs produced, warnings only)
- `deno task bundle`       OK (public/app.bundle.js 5.6MB)
- `deno task css:build`    OK (public/styles.css 81KB)
- `deno task test`         2545 passed / 21 failed — IDENTICAL to main
                           (failures are pre-existing, unrelated)
- `cargo check --lib`      OK
- `deno cache scripts/bundle.ts` OK

Tailwind decision: kept via `npm:tailwindcss@^3.4.19` specifier as a
transitional choice. No fully deno-native drop-in worth the swap right
now (windicss/unocss have semantic divergences from the existing
classes). Worth a follow-up issue under standards#253 for a future
tailwind -> deno-native swap.

Refs:
- standards#253 (estate npm->Deno umbrella)
- panll#62 (band-aid superseded — `npm install --no-audit --no-fund`
  no longer needed)
- session_2026_05_30_snifs_build_mode_arc (lockfile drift origin)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath force-pushed the chore/npm-to-deno-migration branch from fbfeda2 to bacec2f Compare May 30, 2026 16:41
@sonarqubecloud
Copy link
Copy Markdown

hyperpolymath added a commit that referenced this pull request May 30, 2026
Follows panll#65 (npm → Deno migration: package.json + package-lock.json
deleted; ReScript + Tailwind now run via `npm:` specifiers in deno.json
through `deno task res:build` / `deno run -A npm:tailwindcss`).

Files touched (no overlap with #65):
- README.adoc — `npx rescript build` → `deno task res:build` in Development
  + Quick Start sections; Runtime cell reworded ("Deno-only build, no
  package.json or npm CLI").
- src/model/README.md — `npx rescript build` → `deno task res:build` in
  the "Adding a New Module" checklist.
- docs/guides/llm-warmup-user.md — Rules line updated to "Deno only
  (ReScript + Tailwind run via `npm:` specifiers in deno.json)".
- AGENTS.md + GEMINI.md + .junie/guidelines.md — `no-npm-bun` rule and
  `deno-npm-hybrid` decision (renamed `deno-only-with-npm-specifiers`)
  reworded to match shipped reality. These three files are auto-generated
  from coordination.k9, so coordination.k9 is updated in the same pass to
  prevent drift on next regeneration.
- coordination.k9 — source-of-truth update for the three K9-generated
  files above (no-npm-bun + decision block).
- CONTRIBUTING.md — "Deno instead of npm/Node" paragraph updated:
  ReScript + Tailwind via `npm:` specifiers, no package.json, no npm CLI.
- CHANGELOG.md — added an `Unreleased` entry for 2026-05-30 documenting
  the panll#65 migration (deno.json tasks, setup-node removed from CI,
  supersedes panll#62 band-aid).
- scripts/bundle.ts:19 — Tauri JS APIs comment replaced with accurate
  Gossamer IPC bindings description (PanLL migrated FROM Tauri long ago).
- docs/archive/NPM-TO-DENO-MIGRATION.md — added a "CLOSED 2026-05-30 by
  panll#65" status banner at top; body preserved as historical planning
  document (no rewrite).
- tests/cross_panel_integration_test.js:243 — SeamEngine.fullScan input
  list updated `"package.json"` → `"deno.json"` to reflect post-#65 file
  layout (the literal-array test still passes either way; this is a
  doc-correctness fix on the test fixture).

Untouched (deliberately):
- panll/.claude/CLAUDE.md — owner directive (panll#60 reverted; excluded
  from sweeps).
- .github/workflows/build-validation.yml + e2e.yml — panll#65 territory;
  this PR does not touch them.
- All .res/.resi files — out of scope (standards#252).
- TOPOLOGY.md — already clean (uses `deno task res:build`; remaining
  Tauri references are historical-migration context, accurate).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath merged commit 1fa2333 into main May 30, 2026
8 of 20 checks passed
@hyperpolymath hyperpolymath deleted the chore/npm-to-deno-migration branch May 30, 2026 18:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant